package interfaces;

import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

/**
 * Clase que crea el mensaje emergente con los datos básicos de la persona
 * que pasa la indentificación por el lector
 * @author Fco. Molpeceres Blázquez
 */
public class ConserjeTray {
    
    public static boolean listenerExec = true;
    
    public static void main(String [] args){
        /*Look and feel apropiado*/
        try{
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");            
        }catch(UnsupportedLookAndFeelException ex){
            ex.printStackTrace();
        }catch(IllegalAccessException ex){
            ex.printStackTrace();
        }catch(InstantiationException ex){
            ex.printStackTrace();
        }catch(ClassNotFoundException ex){
            ex.printStackTrace();
        }
        
        UIManager.put("swing.boldMetal", Boolean.FALSE);
        /*Sincroniza una tarea para el hilo despachador de eventos*/
        /*Añadiendo el icono del Tray*/
        SwingUtilities.invokeLater(new Runnable() {
            public void run(){
                createAndShowGUI();
            }
        });
    }
    
    private static void createAndShowGUI(){
        
        /*Comprueba si el sistema soporta el SysTray*/
        if(!SystemTray.isSupported()){
            System.out.println("Tu sistema actual no soporta la función SystemTray");
            return;
        }
        final PopupMenu popup = new PopupMenu();
        final TrayIcon trayIcon = 
                new TrayIcon(createImage(".\\door.gif", "tray icon"));
        final SystemTray tray = SystemTray.getSystemTray();
        
        /*Creacion de los componentes del menu popup*/
        MenuItem panelItem = new MenuItem("Panel");
        MenuItem exitItem = new MenuItem("Salir");
        
        /*Añadir los componentes al menu popup*/
        popup.addSeparator();
        popup.add(panelItem);
        popup.addSeparator();
        popup.add(exitItem);
        popup.addSeparator();
        
        trayIcon.setPopupMenu(popup);
        
        try{
            tray.add(trayIcon);
        }catch(AWTException e){
            System.out.println("El icono del Tray podría no ser añadido");
            return;
        }
        
        /********************************************************************************
        * Thread con la ventana emergente con el nombre de la persona que pasa la tarjeta como título
        * y la función de esa persona y su identificación como texto.
        ********************************************************************************/
        EscuchadorID listener = new EscuchadorID(trayIcon);
        listener.start();
        
        /*******************************************************
        * Evento al realizar o bien, doble click sobre el icono,
        * o click sobre la ventana emergente "displayMessage"
        *******************************************************/
        trayIcon.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                //AQUI! instancia de la clase de la interfaz del conserje!
                System.out.println("PRUEBA! --> Le diste a la ventana emergente o doble click al icono!");
            }        
        });      
        
        /*Mismo evento que el anterior, ha de salir el panel del usuario*/
        panelItem.addActionListener(new ActionListener(){
           public void actionPerformed(ActionEvent e){
               //AQUI! instancia de la clase de la interfaz del conserje!
           } 
        });
        
        /*Evento de salida de la aplicación*/
        exitItem.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                listenerExec = false;
                System.exit(0);
            }
        });
        
    }
    
    /**
     *
     * @param path <b>String</b> con la ruta de la imagen
     * @param description <b>String</b> con la descripción del tipo de imagen
     * @return devuelve o bien <b>null</b> en caso de no hallar la ruta de
     * la imagen o <b>Image</b> con la imagen obtenida.
     */
    protected static Image createImage(String path, String description){
        URL imageURL = ConserjeTray.class.getResource(path);
        
        if(imageURL == null){
            System.err.println("Resource not found: " + path);
            return null;
        }else{
            return (new ImageIcon(imageURL, description)).getImage();
        }
    }
}


